package com.atguigu.crowd.util;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.servlet.http.HttpServletRequest;

import com.atguigu.crowd.constant.CrowdConstant;

/**
 * 众筹网通用工具方法类
 * @author 李亮
 *
 */
public class CrowdUtil {
	
	/**
	 * 对明文字符串进行MD5加密
	 * @param score 传入的明文字符串
	 * @return 加密结果
	 */
	public static String md5(String source) {
		//1、判断score是否有效
		if(source==null||source.length()==0) {
			
			//2、如果不是有效的字符串则抛出异常
			throw new RuntimeException(CrowdConstant.MESSAGE_STRING_INVALDATA);
		}
		try {
			//3、获取MessageDigest对象
			String algorithm="md5";
			
			MessageDigest messageDigest=MessageDigest.getInstance(algorithm);
			
			//4、获取明文字符串对应的字节数组
			byte[] input=source.getBytes();
			
			//5、执行加密
			byte []outPut=messageDigest.digest(input);
			
			//6、创建BigInteger对象
			int singnum=1;
			BigInteger bigInteger=new BigInteger(singnum,outPut);
			
			//7、按照16进制将 bigInteger 的值转换为字符串
			int radix=16;
			String encoded=bigInteger.toString(radix).toString().toUpperCase();
			
			return encoded;
			
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}	
		 return "";	//这里可以这么写，没有任何问题
	}
	
	
	/**
	 * 判断是普通请求还是ajax请求
	 * @param request 请求对象
	 * @return
	 * 		true：当前请求是Ajax请求
	 * 		false：当前请求不是Ajax请求
	 */
	public static boolean judgeRequestType(HttpServletRequest request) {
		//1、获取请求消息头
		String acceptHeader=request.getHeader("Accept");
		String xRequested=request.getHeader("X-Requested-With");
		
		//2、判断
		if(acceptHeader!=null && acceptHeader.contains("application/json")) {
			
			return true;	//是ajax请求（Jaso请求）
			
		}else if(xRequested!=null && xRequested.contains("XMLHttpRequest")) {
			
			return true;	//是ajax请求（可能不是Jaso请求，但是还是ajax请求）
		}
		else {
			return false;	//普通请求
		}
		
		//上面的判断如果想装X可以这样写
/*		// 2.判断
		return (acceptHeader != null && acceptHeader.contains("application/json"))
				
				||
				
				(xRequestHeader != null && xRequestHeader.equals("XMLHttpRequest"));*/
		
	}
	
}



